// Copyright 2022 a.o.smith ALL Rights Reserved
package com.liuxinlong.modules.assets.service;

import com.liuxinlong.common.ImportResp;
import com.liuxinlong.modules.assets.dto.AssetsCostDto;
import com.liuxinlong.modules.assets.dto.AssetsOrderForecastDto;
import com.liuxinlong.modules.assets.dto.ImportAssetsInfoDto;
import com.liuxinlong.modules.entity.Assets;
import com.liuxinlong.modules.entity.AssetsMonthDetail;
import com.liuxinlong.modules.entity.AssetsSourceRelation;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 固资管理业务接口层
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2023-10-31
 */
public interface AssetsService {
    /**
     * 查询固资管理列表
     *
     * @param queryParam 查询参数
     * @return 固资管理列表
     */
    Map<String, Object> pageAssetsInfo(Map<String, Object> queryParam);

    /**
     * 获取固资管理数量
     *
     * @param queryParam 查询参数
     * @return 固资管理数量
     */
    int getAssetsInfoCount(Map<String, Object> queryParam);

    /**
     * 新增固资管理信息
     *
     * @param assets     固资管理信息
     * @param sourceList 固资预算来源信息
     */
    void addAssetsInfo(Assets assets, List<AssetsSourceRelation> sourceList);

    /**
     * 修改固资管理信息
     *
     * @param assets     固资管理信息
     * @param sourceList 固资预算来源信息
     */
    void updateAssetsInfo(Assets assets, List<AssetsSourceRelation> sourceList);

    /**
     * 删除固资管理信息
     *
     * @param id 固资管理信息id
     */
    void deleteAssetsInfo(String id);

    /**
     * 导出固资管理信息
     *
     * @param queryParam 查询参数
     * @param response   response
     */
    void exportAssetsInfo(Map<String, Object> queryParam, HttpServletResponse response);

    /**
     * 导入数据预处理
     *
     * @param fileName 文件地址
     * @return 预处理数据
     */
    ImportResp importAssetsInfo(String fileName);

    /**
     * 批量新增固资管理信息
     *
     * @param dataList 固资管理信息列表
     * @return 失败数据
     */
    ImportResp batchAddAssetsInfo(List<ImportAssetsInfoDto> dataList);

    /**
     * 修改固资管理状态
     *
     * @param id           固资管理信息id
     * @param targetStatus 目标状态
     */
    void updateAssetsInfoStatus(String id, int targetStatus);

    /**
     * 查询固资拓展信息
     *
     * @param id         固资id
     * @param chooseYear 年份
     * @return 固资拓展信息
     */
    Map<String, Object> queryAssetsExpandInfo(String id, String chooseYear);

    /**
     * 查询固资预算来源信息列表
     *
     * @param id 固资id
     * @return 固资预算来源信息列表
     */
    List<Map<String, Object>> pageAssetsSourceInfo(String id);

    /**
     * 新增固资预算来源信息
     *
     * @param assetsSourceRelation 固资预算来源信息
     */
    void addAssetsSourceInfo(AssetsSourceRelation assetsSourceRelation);

    /**
     * 修改固资预算来源信息
     *
     * @param assetsSourceRelation 固资预算来源信息
     */
    void updateAssetsSourceInfo(AssetsSourceRelation assetsSourceRelation);

    /**
     * 删除固资预算来源信息
     *
     * @param id 固资预算来源信息id
     */
    void deleteAssetsSourceInfo(String id);

    /**
     * 查询固资预测信息列表
     *
     * @param id          固资id
     * @param currentYear 年度
     * @return 固资预测信息列表
     */
    Map<String, Object> pageAssetsForecastInfo(String id, String currentYear);

    /**
     * 修改固资预测信息
     *
     * @param assetsMonthDetail 固资预测信息
     * @param orderForecastList 订单预测信息列表
     * @param costList          花费信息列表
     */
    void updateAssetsForecastInfo(AssetsMonthDetail assetsMonthDetail, List<AssetsOrderForecastDto> orderForecastList, List<AssetsCostDto> costList);

    /**
     * 校正固资花费信息
     */
    void checkAssetsCost();

    /**
     * 生成统计信息
     */
    void generateAssetsStatistics();

    /**
     * 修改固资等级信息
     *
     * @param id 固资id
     */
    void updateAssetsRecommend(String id);
}
